unsigned char LED_0F[] = 
{
  // 0	1	2	3	4	5	6	7	8	9	A.	c.	0.	1.	2.	3.	4.	5.	6.	7.	8.	9.	f.
  0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x08,0x46,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x0e,
};
unsigned char LED[4];	// 用于LED的4位显示缓存
int SCLK = 3;
int RCLK = 4;
int DIO = 5; //这里定义了那三个脚
int INPUT11 = 2;
float maxTemp,tempC7,counter,qw;

void LED4_Display (void)
{
  unsigned char *led_table;          // 查表指针
  unsigned char i;

  // 显示第1位
  led_table = LED_0F + LED[0];
  i = *led_table;
  LED_OUT(i);
  LED_OUT(0x01);
  digitalWrite(RCLK,LOW);
  digitalWrite(RCLK,HIGH);

  // 显示第2位
  led_table = LED_0F + LED[1];
  i = *led_table;
  LED_OUT(i);
  LED_OUT(0x02);
  digitalWrite(RCLK,LOW);
  digitalWrite(RCLK,HIGH);

  // 显示第3位，带小数点
  led_table = LED_0F + LED[2];
  i = *led_table;
  LED_OUT(i);
  LED_OUT(0x04);
  digitalWrite(RCLK,LOW);
  digitalWrite(RCLK,HIGH);

  // 显示第4位
  led_table = LED_0F + LED[3];
  i = *led_table;
  LED_OUT(i);
  LED_OUT(0x08);
  digitalWrite(RCLK,LOW);
  digitalWrite(RCLK,HIGH);
}

void LED_OUT(unsigned char X)
{
  unsigned char i;
  for(i=8;i>=1;i--)
  {
    if (X&0x80) 
    {
      digitalWrite(DIO,HIGH);
    }  
    else 
    {
      digitalWrite(DIO,LOW);
    }
    X<<=1;
    digitalWrite(SCLK,LOW);
    digitalWrite(SCLK,HIGH);
  }
}

void setup ()
{
  // 初始化串口和相应脚
  Serial.begin(9600);
  pinMode(SCLK,OUTPUT);
  pinMode(RCLK,OUTPUT); 
  pinMode(DIO,OUTPUT);
  pinMode(INPUT11,INPUT);
  counter = 1;
  qw = 0;

}

void loop() {
 if (digitalRead(INPUT11)) 
 { 
  if(qw != 1){
    delay(200);
  // 传输数据
  Serial.print("cc:123\r\n");//:后面可以自定义密码，在从机上改cc1的值
  qw = 1;

  }else{
    led1();
    }
 }else{qw = 0;}
}
 
void led1() {
  while (!Serial.available()); // 等待可用数据
  String message = Serial.readStringUntil('\n'); // 读取一行数据
  int commaIndex = message.indexOf(','); // 查找逗号位置
  maxTemp = message.substring(0, commaIndex).toFloat(); // 获取最高温度值
  tempC7 = message.substring(commaIndex + 1).toFloat(); // 获取第七个温度值


  if (counter != 0) { // 显示maxTemp的小数部分、个位数字和十位数字，第4位显示字母A
    int maxTemp_int = (int)maxTemp; // 将maxTemp强制转换为整型
    int maxTemp_dec = (int)((maxTemp - maxTemp_int) * 10); // 计算maxTemp的小数部分
    LED[0] = maxTemp_dec; // 显示maxTemp的小数部分
    LED[1] = (maxTemp_int % 10) + 12; // 显示maxTemp的个位数字(包括小数点)
    LED[2] = maxTemp_int / 10; // 显示maxTemp的十位数字
    LED[3] = 10; //
    counter = 0;
    } else { // 显示tempC7的小数部分、个位数字和十位数字，第4位显示字母C
int tempC7_int = (int)tempC7; // 将tempC7强制转换为整型
int tempC7_dec = (int)((tempC7 - tempC7_int) * 10); // 计算tempC7的小数部分
LED[0] = tempC7_dec; // 显示tempC7的小数部分
LED[1] = (tempC7_int % 10) + 12; // 显示tempC7的个位数字

LED[2] = tempC7_int / 10; // 显示tempC7的十位数字
LED[3] = 11; // 显示字母C
counter = 1;
}

float q1 = 1;
   while(1)
    {if(q1 != 3000){
     LED4_Display ();//delay(5); // 稍微延长一下显示时间，避免闪烁
q1++;  }else
break;  }
delay(5); // 稍微延长一下显示时间，避免闪烁
}
